Getting the data

# don't read again, we've already got it
if (!exists('customers_org')){
  readData(customers_file, subscriptions_file, gdp_file)
}

Optionally sample the data for faster development

customers <- customers_org %>%
  processCustomers(SAMPLE_DATA, fraction_sample)
subscriptions <- subscriptions_org %>%
  # Removing customers not in the customers set
  filter(customerid %in% customers$customerid) %>%
  processSubscriptions() %>%
  joinProcessCustomers(customers, age_to_join_sitevers = 5) %>%
  joinProcessGDP(gdp) %>%
  concatCategrories() %>%
  mutate_if(is.character, funs(as.factor))
  
summary(subscriptions)
   customerid       subscriptionid      revenuecurr        billingcurrency    startmonth            endmonth              months          status        num_previous_months
 Min.   :   10006   Min.   :     154   Min.   :      0.8   DKK    :668540   Min.   :2003-12-01   Min.   :2004-03-01   Min.   : 1.000   active:1840623   Min.   :  0.00     
 1st Qu.: 1090111   1st Qu.: 5121661   1st Qu.:     15.0   EUR    :532574   1st Qu.:2012-12-01   1st Qu.:2013-04-01   1st Qu.: 1.000   churn : 442541   1st Qu.:  1.00     
 Median : 5319576   Median :14784414   Median :     63.2   USD    :505039   Median :2014-12-01   Median :2015-03-01   Median : 3.000                    Median :  8.00     
 Mean   : 8044651   Mean   :14612438   Mean   :   1382.8   NOK    :232550   Mean   :2014-05-02   Mean   :2014-08-18   Mean   : 3.532                    Mean   : 15.34     
 3rd Qu.:14410806   3rd Qu.:24044332   3rd Qu.:    174.0   SEK    :159059   3rd Qu.:2016-07-01   3rd Qu.:2016-11-01   3rd Qu.: 3.000                    3rd Qu.: 22.00     
 Max.   :23917123   Max.   :29424356   Max.   :2823000.0   GBP    : 96217   Max.   :2018-03-01   Max.   :2020-03-01   Max.   :24.000                    Max.   :162.00     
                                                           (Other): 89185                                                                                                  
 num_previous_subs num_previous_months_binned firstpaiddate        channelcat      paymentperiodchosenatstart    currency        marketname       siteverkey     firstpaidmonth      
 Min.   : 0.000    Min.   : 0.00              Min.   :2003-12-15   paid :1518216   Min.   :-1.000             DKK    :668679   DK     :669017   US     :898770   Min.   :2003-12-01  
 1st Qu.: 1.000    1st Qu.: 1.00              1st Qu.:2010-12-12   viral: 764948   1st Qu.: 1.000             USD    :543314   NO     :232881   DK     :637715   1st Qu.:2010-12-01  
 Median : 3.000    Median : 8.00              Median :2013-06-23                   Median : 3.000             EUR    :537318   US     :188723   NO     :207482   Median :2013-06-01  
 Mean   : 6.028    Mean   :14.72              Mean   :2013-01-16                   Mean   : 4.237             NOK    :232433   SE     :159905   SE     :144173   Mean   :2013-01-02  
 3rd Qu.: 8.000    3rd Qu.:26.00              3rd Qu.:2015-08-19                   3rd Qu.: 3.000             SEK    :158858   FR     :146174   FR     : 96298   3rd Qu.:2015-08-01  
 Max.   :68.000    Max.   :39.00              Max.   :2018-03-26                   Max.   :24.000             GBP    : 93847   (Other):886057   NL     : 79701   Max.   :2018-03-01  
                                                                                                              (Other): 48715   NA's   :   407   (Other):219025                       
  firstdevice          segment        isquickpurchase  productversion      isfreemium                                model31224        market_category   siteverkey_cat siteverkey_cat2
 desktop: 175519   business: 407581   Min.   :0.0000   v_3    : 898821   Min.   :0.0000   pre-changes                     :1894566   DK        :669017   ORG:1384394    MUT:1311010    
 mobile :  70157   other   :  97467   1st Qu.:0.0000   v_4    : 138959   1st Qu.:0.0000   3-12m-v1-2015-11-30             : 145756   LowGeneric:265151   SS : 898770    ORG: 402042    
 NA's   :2037488   personal: 293518   Median :1.0000   v_older:1245078   Median :0.0000   3-12-24m-2016-08-25             : 144551   NO        :232881                  SS : 570112    
                   NA's    :1484598   Mean   :0.5282   NA's   :    306   Mean   :0.2547   12m-v2-2015-05-16               :  71866   US        :188723                                 
                                      3rd Qu.:1.0000                     3rd Qu.:1.0000   ex-subscriptionplanpaywallexpand:   8305   SE        :159905                                 
                                      Max.   :1.0000                     Max.   :1.0000   ex-uglyjerry12mswitch           :   5388   FR        :146174                                 
                                      NA's   :306                        NA's   :306      (Other)                         :  12732   (Other)   :621313                                 
 chosen_subs_length  gdppercapita      gdppercapita_scaled                           subscription_summary            subscription_summary_no_market
 1  :  56935        Min.   :   218.3   Min.   :-2.4437     mc-DK_ssc-MUT_ac-39_m-3_ccsl-gen    : 109608   ssc-MUT_ac-26_m-3_ccsl-gen: 203834       
 -1 :  11140        1st Qu.: 42013.3   1st Qu.:-0.4694     mc-DK_ssc-MUT_ac-26_m-3_ccsl-gen    :  77645   ssc-MUT_ac-39_m-3_ccsl-gen: 170628       
 12 :  51360        Median : 55670.9   Median : 0.1758     mc-LowGeneric_ssc-SS_ac-0_m-1_ccsl-3:  60652   ssc-SS_ac-0_m-1_ccsl-3    : 161585       
 24 :   6897        Mean   : 51950.1   Mean   : 0.0000     mc-DK_ssc-ORG_ac-0_m-3_ccsl-gen     :  58390   ssc-ORG_ac-0_m-3_ccsl-gen : 132393       
 3  : 204319        3rd Qu.: 60637.3   3rd Qu.: 0.4104     mc-DK_ssc-MUT_ac-38_m-3_ccsl-gen    :  51997   ssc-MUT_ac-8_m-3_ccsl-gen : 120482       
 gen:1952513        Max.   :108422.5   Max.   : 2.6676     mc-DK_ssc-ORG_ac-3_m-3_ccsl-gen     :  41933   ssc-MUT_ac-38_m-3_ccsl-gen: 111133       
                                                           (Other)                             :1882939   (Other)                   :1383109       
subscriptions_with_target <- subscriptions %>%
  # restrict to a recent expiry window
  filter(endmonth >= begin_train_window & endmonth < end_window) %>%
  mutate(num_previous_months_binned_fct = as.factor(num_previous_months_binned)) %>%
  mutate(set_type = as.factor(if_else(endmonth >= begin_validation_window, 'validation', 'training'))) %>%
  
  mutate(churnind = ifelse(status == 'churn', 1, 0)) 

Prepare churntable that we want to predicdt

churntable <- subscriptions_with_target %>%
  
  group_by(set_type, siteverkey_cat2, market_category, months, num_previous_months_binned, chosen_subs_length, subscription_summary_no_market) %>%
  summarise(num_obs = n(), 
            churned = sum(churnind)) %>%
  
  group_by(set_type) %>%
  mutate(churn_rate = churned / num_obs,
         renew_rate = 1 - churn_rate,
         month_churn = 1 - renew_rate ^ (1/as.double(months)),
         log_month_churn = log(month_churn),
         weight = num_obs / sum(num_obs))
# NB! Does this introduce a bad bias ????
churntable_no_zeros <- churntable %>%
  filter(churn_rate > 0)
summary(churntable)
       set_type   siteverkey_cat2   market_category     months      num_previous_months_binned chosen_subs_length             subscription_summary_no_market    num_obs      
 training  :852   MUT:639         SE        :109    Min.   : 1.00   Min.   : 0.00              1  :  79           ssc-MUT_ac-11_m-1_ccsl-gen :  36           Min.   :   1.0  
 validation:745   ORG:267         DK        :107    1st Qu.: 1.00   1st Qu.: 1.00              -1 :  62           ssc-MUT_ac-11_m-3_ccsl-gen :  36           1st Qu.:   6.0  
                  SS :691         NL        :105    Median : 3.00   Median : 3.00              12 :  97           ssc-MUT_ac-14_m-12_ccsl-gen:  36           Median :  60.0  
                                  FI        :101    Mean   : 4.54   Mean   :10.13              24 :  33           ssc-MUT_ac-14_m-1_ccsl-gen :  36           Mean   : 220.9  
                                  BE        : 99    3rd Qu.:12.00   3rd Qu.:14.00              3  : 109           ssc-MUT_ac-14_m-3_ccsl-gen :  36           3rd Qu.: 210.0  
                                  LowGeneric: 97    Max.   :12.00   Max.   :39.00              gen:1217           ssc-MUT_ac-26_m-12_ccsl-gen:  36           Max.   :8401.0  
                                  (Other)   :979                                                                  (Other)                    :1381                           
    churned          churn_rate        renew_rate      month_churn      log_month_churn      weight         
 Min.   :   0.00   Min.   :0.00000   Min.   :0.0000   Min.   :0.00000   Min.   :  -Inf   Min.   :4.330e-06  
 1st Qu.:   1.00   1st Qu.:0.06289   1st Qu.:0.6667   1st Qu.:0.02245   1st Qu.:-3.796   1st Qu.:3.285e-05  
 Median :   9.00   Median :0.16667   Median :0.8333   Median :0.05620   Median :-2.879   Median :3.550e-04  
 Mean   :  53.58   Mean   :0.23547   Mean   :0.7645   Mean   :0.14082   Mean   :  -Inf   Mean   :1.252e-03  
 3rd Qu.:  35.00   3rd Qu.:0.33333   3rd Qu.:0.9371   3rd Qu.:0.12738   3rd Qu.:-2.061   3rd Qu.:1.221e-03  
 Max.   :5317.00   Max.   :1.00000   Max.   :1.0000   Max.   :1.00000   Max.   : 0.000   Max.   :5.028e-02  
                                                                                                            
summary(churntable_no_zeros)
       set_type   siteverkey_cat2   market_category     months       num_previous_months_binned chosen_subs_length             subscription_summary_no_market    num_obs      
 training  :724   MUT:619         LowGeneric: 89    Min.   : 1.000   Min.   : 0.00              1  :  44           ssc-MUT_ac-11_m-1_ccsl-gen :  36           Min.   :   1.0  
 validation:623   ORG:153         SE        : 89    1st Qu.: 1.000   1st Qu.: 1.00              -1 :  55           ssc-MUT_ac-11_m-3_ccsl-gen :  36           1st Qu.:  21.5  
                  SS :575         DK        : 87    Median : 3.000   Median : 5.00              12 :  59           ssc-MUT_ac-14_m-1_ccsl-gen :  36           Median :  89.0  
                                  BE        : 81    Mean   : 4.406   Mean   :11.48              24 :  33           ssc-MUT_ac-14_m-3_ccsl-gen :  36           Mean   : 261.3  
                                  NL        : 81    3rd Qu.: 3.000   3rd Qu.:14.00              3  :  81           ssc-MUT_ac-26_m-12_ccsl-gen:  36           3rd Qu.: 260.0  
                                  FI        : 79    Max.   :12.000   Max.   :39.00              gen:1075           ssc-MUT_ac-26_m-1_ccsl-gen :  36           Max.   :8401.0  
                                  (Other)   :841                                                                   (Other)                    :1131                           
    churned          churn_rate         renew_rate      month_churn       log_month_churn      weight         
 Min.   :   1.00   Min.   :0.007194   Min.   :0.0000   Min.   :0.003869   Min.   :-5.555   Min.   :4.330e-06  
 1st Qu.:   4.00   1st Qu.:0.109344   1st Qu.:0.6262   1st Qu.:0.036349   1st Qu.:-3.315   1st Qu.:1.232e-04  
 Median :  13.00   Median :0.200000   Median :0.8000   Median :0.072581   Median :-2.623   Median :5.420e-04  
 Mean   :  63.52   Mean   :0.279174   Mean   :0.7208   Mean   :0.166960   Mean   :-2.482   Mean   :1.481e-03  
 3rd Qu.:  46.00   3rd Qu.:0.373775   3rd Qu.:0.8907   3rd Qu.:0.160295   3rd Qu.:-1.831   3rd Qu.:1.472e-03  
 Max.   :5317.00   Max.   :1.000000   Max.   :0.9928   Max.   :1.000000   Max.   : 0.000   Max.   :5.028e-02  
                                                                                                              

Calculate model

new_model=glm(log_month_churn ~ market_category + subscription_summary_no_market, data=churntable_no_zeros[churntable_no_zeros$set_type == 'training', ], weights = weight)
summary(new_model)

Call:
glm(formula = log_month_churn ~ market_category + subscription_summary_no_market, 
    data = churntable_no_zeros[churntable_no_zeros$set_type == 
        "training", ], weights = weight)

Deviance Residuals: 
      Min         1Q     Median         3Q        Max  
-0.040657  -0.003222   0.000151   0.003451   0.027695  

Coefficients:
                                                          Estimate Std. Error t value Pr(>|t|)    
(Intercept)                                               -3.83989    0.22628 -16.970  < 2e-16 ***
market_categoryBE                                         -0.32036    0.06157  -5.203 2.63e-07 ***
market_categoryCA                                          0.03502    0.06802   0.515 0.606820    
market_categoryCH                                         -0.31986    0.06400  -4.998 7.46e-07 ***
market_categoryDE                                         -0.26244    0.07363  -3.564 0.000391 ***
market_categoryDK                                         -0.34344    0.05092  -6.745 3.39e-11 ***
market_categoryES                                          0.01377    0.06067   0.227 0.820567    
market_categoryFI                                         -0.48036    0.06319  -7.602 1.03e-13 ***
market_categoryFR                                         -0.10393    0.05245  -1.982 0.047944 *  
market_categoryGB                                         -0.06693    0.05311  -1.260 0.208071    
market_categoryHighLTV                                    -0.24680    0.06037  -4.088 4.89e-05 ***
market_categoryIT                                         -0.01005    0.05928  -0.170 0.865417    
market_categoryLowGeneric                                  0.20584    0.04922   4.182 3.29e-05 ***
market_categoryMediumLTV                                   0.13015    0.06289   2.069 0.038903 *  
market_categoryNL                                         -0.33667    0.05747  -5.858 7.44e-09 ***
market_categoryNO                                         -0.29224    0.05271  -5.544 4.31e-08 ***
market_categorySE                                         -0.24265    0.05520  -4.396 1.29e-05 ***
market_categoryUS                                          0.07331    0.05049   1.452 0.146959    
subscription_summary_no_marketssc-MUT_ac-11_m-1_ccsl-gen   1.45713    0.22596   6.449 2.21e-10 ***
subscription_summary_no_marketssc-MUT_ac-11_m-3_ccsl-gen   1.26135    0.22400   5.631 2.67e-08 ***
subscription_summary_no_marketssc-MUT_ac-14_m-12_ccsl-gen  0.41518    0.23409   1.774 0.076598 .  
subscription_summary_no_marketssc-MUT_ac-14_m-1_ccsl-gen   1.27776    0.22646   5.642 2.51e-08 ***
subscription_summary_no_marketssc-MUT_ac-14_m-3_ccsl-gen   1.15715    0.22451   5.154 3.39e-07 ***
subscription_summary_no_marketssc-MUT_ac-26_m-12_ccsl-gen  0.20456    0.22882   0.894 0.371659    
subscription_summary_no_marketssc-MUT_ac-26_m-1_ccsl-gen   1.13388    0.22352   5.073 5.12e-07 ***
subscription_summary_no_marketssc-MUT_ac-26_m-3_ccsl-gen   0.90829    0.22254   4.081 5.03e-05 ***
subscription_summary_no_marketssc-MUT_ac-38_m-12_ccsl-gen  0.02720    0.22854   0.119 0.905286    
subscription_summary_no_marketssc-MUT_ac-38_m-1_ccsl-gen   0.66673    0.22623   2.947 0.003323 ** 
subscription_summary_no_marketssc-MUT_ac-38_m-3_ccsl-gen   0.72334    0.22346   3.237 0.001270 ** 
subscription_summary_no_marketssc-MUT_ac-39_m-12_ccsl-gen -0.05753    0.22473  -0.256 0.798024    
subscription_summary_no_marketssc-MUT_ac-39_m-1_ccsl-gen   0.35889    0.22308   1.609 0.108142    
subscription_summary_no_marketssc-MUT_ac-39_m-3_ccsl-gen   0.31598    0.22275   1.419 0.156507    
subscription_summary_no_marketssc-MUT_ac-8_m-12_ccsl-gen   0.37083    0.30425   1.219 0.223348    
subscription_summary_no_marketssc-MUT_ac-8_m-1_ccsl-gen    1.55388    0.22554   6.890 1.33e-11 ***
subscription_summary_no_marketssc-MUT_ac-8_m-3_ccsl-gen    1.39414    0.22367   6.233 8.24e-10 ***
subscription_summary_no_marketssc-ORG_ac-0_m-12_ccsl-gen   0.66347    0.26956   2.461 0.014104 *  
subscription_summary_no_marketssc-ORG_ac-0_m-1_ccsl-gen    2.82854    0.27342  10.345  < 2e-16 ***
subscription_summary_no_marketssc-ORG_ac-0_m-3_ccsl-gen    1.46641    0.23521   6.234 8.18e-10 ***
subscription_summary_no_marketssc-ORG_ac-1_m-12_ccsl-12    0.74514    0.95218   0.783 0.434169    
subscription_summary_no_marketssc-ORG_ac-1_m-1_ccsl-1      2.65525    1.15554   2.298 0.021888 *  
subscription_summary_no_marketssc-ORG_ac-1_m-1_ccsl--1     3.38939    2.27866   1.487 0.137383    
subscription_summary_no_marketssc-ORG_ac-1_m-1_ccsl-3      3.09996    1.45141   2.136 0.033068 *  
subscription_summary_no_marketssc-ORG_ac-1_m-3_ccsl--1     2.01439    1.86498   1.080 0.280493    
subscription_summary_no_marketssc-ORG_ac-1_m-3_ccsl-3      1.66834    0.29758   5.606 3.06e-08 ***
subscription_summary_no_marketssc-ORG_ac-2_m-3_ccsl-gen    2.32230    1.61897   1.434 0.151932    
subscription_summary_no_marketssc-ORG_ac-3_m-12_ccsl-gen   0.52768    0.46955   1.124 0.261517    
subscription_summary_no_marketssc-ORG_ac-3_m-1_ccsl-gen    2.30774    0.78783   2.929 0.003518 ** 
subscription_summary_no_marketssc-ORG_ac-3_m-3_ccsl-gen    1.17758    0.24076   4.891 1.27e-06 ***
subscription_summary_no_marketssc-ORG_ac-5_m-12_ccsl-gen   0.77208    0.95242   0.811 0.417865    
subscription_summary_no_marketssc-ORG_ac-5_m-1_ccsl-gen    2.08651    0.56566   3.689 0.000244 ***
subscription_summary_no_marketssc-ORG_ac-5_m-3_ccsl-gen    1.37975    0.32385   4.260 2.34e-05 ***
subscription_summary_no_marketssc-SS_ac-0_m-12_ccsl-1      0.75389    2.27854   0.331 0.740854    
subscription_summary_no_marketssc-SS_ac-0_m-12_ccsl--1     3.60318    0.62602   5.756 1.33e-08 ***
subscription_summary_no_marketssc-SS_ac-0_m-12_ccsl-12     0.73677    0.35543   2.073 0.038578 *  
subscription_summary_no_marketssc-SS_ac-0_m-1_ccsl-1       2.07397    0.22434   9.245  < 2e-16 ***
subscription_summary_no_marketssc-SS_ac-0_m-1_ccsl--1      3.85265    0.24688  15.606  < 2e-16 ***
subscription_summary_no_marketssc-SS_ac-0_m-1_ccsl-12      3.15795    0.22330  14.143  < 2e-16 ***
subscription_summary_no_marketssc-SS_ac-0_m-1_ccsl-24      3.43465    0.22826  15.047  < 2e-16 ***
subscription_summary_no_marketssc-SS_ac-0_m-1_ccsl-3       3.21954    0.22236  14.479  < 2e-16 ***
subscription_summary_no_marketssc-SS_ac-0_m-3_ccsl-1       1.06075    0.48948   2.167 0.030591 *  
subscription_summary_no_marketssc-SS_ac-0_m-3_ccsl--1      3.17405    0.76852   4.130 4.10e-05 ***
subscription_summary_no_marketssc-SS_ac-0_m-3_ccsl-12      2.40750    0.50088   4.807 1.91e-06 ***
subscription_summary_no_marketssc-SS_ac-0_m-3_ccsl-24      2.94090    0.83188   3.535 0.000436 ***
subscription_summary_no_marketssc-SS_ac-0_m-3_ccsl-3       1.96579    0.28075   7.002 6.33e-12 ***
subscription_summary_no_marketssc-SS_ac-1_m-12_ccsl-gen    1.26089    0.22576   5.585 3.44e-08 ***
subscription_summary_no_marketssc-SS_ac-1_m-1_ccsl-gen     2.53295    0.22664  11.176  < 2e-16 ***
subscription_summary_no_marketssc-SS_ac-1_m-3_ccsl-gen     2.04830    0.22320   9.177  < 2e-16 ***
subscription_summary_no_marketssc-SS_ac-2_m-12_ccsl-gen    0.98453    1.15530   0.852 0.394426    
subscription_summary_no_marketssc-SS_ac-2_m-1_ccsl-gen     2.11032    0.22883   9.222  < 2e-16 ***
subscription_summary_no_marketssc-SS_ac-2_m-3_ccsl-gen     2.57722    0.58563   4.401 1.26e-05 ***
subscription_summary_no_marketssc-SS_ac-3_m-12_ccsl-gen    1.02481    0.56541   1.813 0.070370 .  
subscription_summary_no_marketssc-SS_ac-3_m-1_ccsl-gen     1.89554    0.23142   8.191 1.38e-15 ***
subscription_summary_no_marketssc-SS_ac-3_m-3_ccsl-gen     1.37624    0.29736   4.628 4.46e-06 ***
subscription_summary_no_marketssc-SS_ac-5_m-12_ccsl-gen    0.39500    0.30489   1.296 0.195582    
subscription_summary_no_marketssc-SS_ac-5_m-1_ccsl-gen     1.76062    0.22620   7.783 2.80e-14 ***
subscription_summary_no_marketssc-SS_ac-5_m-3_ccsl-gen     1.59668    0.22387   7.132 2.65e-12 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 4.452684e-05)

    Null deviance: 1.253106  on 723  degrees of freedom
Residual deviance: 0.028853  on 648  degrees of freedom
AIC: 632.38

Number of Fisher Scoring iterations: 2
anova(new_model, test="Chisq")
Analysis of Deviance Table

Model: gaussian, link: identity

Response: log_month_churn

Terms added sequentially (first to last)

                               Df Deviance Resid. Df Resid. Dev  Pr(>Chi)    
NULL                                             723    1.25311              
market_category                17  0.39035       706    0.86276 < 2.2e-16 ***
subscription_summary_no_market 58  0.83390       648    0.02885 < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Validate

model_validation <- validation(subscriptions_with_target, new_model, predict_2fct_model)
model_validation$summary_table
model_validation$roc_plot

model_validation$calibration_plots

model_validation$real_churn_plot

Try simple logistic model

model_logit <- glm(churnind ~ market_category + siteverkey_cat2 + num_previous_months_binned + months + chosen_subs_length,
                   data = subscriptions_with_target[subscriptions_with_target$set_type == 'training',], family = 'binomial')
summary(model_logit)

Call:
glm(formula = churnind ~ market_category + siteverkey_cat2 + 
    num_previous_months_binned + months + chosen_subs_length, 
    family = "binomial", data = subscriptions_with_target[subscriptions_with_target$set_type == 
        "training", ])

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.3404  -0.6803  -0.4575  -0.2925   2.5741  

Coefficients:
                             Estimate Std. Error z value Pr(>|z|)    
(Intercept)                -2.2193453  0.0517979 -42.846  < 2e-16 ***
market_categoryBE          -0.2473653  0.0524459  -4.717 2.40e-06 ***
market_categoryCA           0.1111611  0.0543796   2.044 0.040937 *  
market_categoryCH          -0.3848481  0.0544353  -7.070 1.55e-12 ***
market_categoryDE          -0.0924981  0.0594245  -1.557 0.119574    
market_categoryDK          -0.3327453  0.0429505  -7.747 9.40e-15 ***
market_categoryES           0.1523226  0.0482807   3.155 0.001605 ** 
market_categoryFI          -0.4979859  0.0567620  -8.773  < 2e-16 ***
market_categoryFR          -0.0917230  0.0430004  -2.133 0.032919 *  
market_categoryGB          -0.0046539  0.0434068  -0.107 0.914618    
market_categoryHighLTV     -0.2249732  0.0505262  -4.453 8.48e-06 ***
market_categoryIT           0.1773640  0.0465219   3.812 0.000138 ***
market_categoryLowGeneric   0.4091368  0.0398422  10.269  < 2e-16 ***
market_categoryMediumLTV    0.2275756  0.0494119   4.606 4.11e-06 ***
market_categoryNL          -0.1310059  0.0478238  -2.739 0.006156 ** 
market_categoryNO          -0.3524814  0.0452665  -7.787 6.87e-15 ***
market_categorySE          -0.3034603  0.0474910  -6.390 1.66e-10 ***
market_categoryUS           0.2287022  0.0408544   5.598 2.17e-08 ***
siteverkey_cat2ORG         -0.0844012  0.0437747  -1.928 0.053845 .  
siteverkey_cat2SS           0.4394926  0.0200514  21.918  < 2e-16 ***
num_previous_months_binned -0.0324040  0.0007443 -43.536  < 2e-16 ***
months                      0.1355959  0.0018096  74.931  < 2e-16 ***
chosen_subs_length-1        3.1279991  0.0864739  36.173  < 2e-16 ***
chosen_subs_length12        1.5784729  0.0340310  46.383  < 2e-16 ***
chosen_subs_length24        2.3311419  0.0473129  49.271  < 2e-16 ***
chosen_subs_length3         1.7088960  0.0312631  54.662  < 2e-16 ***
chosen_subs_lengthgen       0.5695083  0.0308393  18.467  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 256336  on 230984  degrees of freedom
Residual deviance: 212645  on 230958  degrees of freedom
AIC: 212699

Number of Fisher Scoring iterations: 5

Validate

model_validation_logit <- validation(subscriptions_with_target, model_logit)
model_validation_logit$summary_table
model_validation_logit$roc_plot

model_validation_logit$calibration_plots

model_validation_logit$real_churn_plot

LS0tCnRpdGxlOiAiQ2h1cm46IFR3byBkaW1lbnNpb25zIGFuZCBwcmVkaWN0IGxvZyBvZiBtb250aGx5IGNodXJuIHByb2JhYmlsaXR5IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Kc291cmNlKCdjb25maWcuUicpCnNvdXJjZSgndXRpbHMuUicpCnNvdXJjZSgndXRpbHNfdmFsaWRhdGlvbi5SJykKCiMgc2FtcGxpbmcgZm9yIGRldgojIFNBTVBMRV9EQVRBIDwtIFRSVUUKU0FNUExFX0RBVEEgPC0gRkFMU0UKZnJhY3Rpb25fc2FtcGxlIDwtIDAuMDEgIyB1c2UgdGhpcyB0byBzbGltIGRhdGEgZm9yIGZhc3RlciBleHBlcmltZW50YXRpb24KCiMgc291cmNlKCduZXdfbGlmZXRpbWVwcmVkaWN0b3IuUicpCmBgYAoKR2V0dGluZyB0aGUgZGF0YQoKYGBge3IgcmVhZGluZywgdGlkeT1GfQojIGRvbid0IHJlYWQgYWdhaW4sIHdlJ3ZlIGFscmVhZHkgZ290IGl0CmlmICghZXhpc3RzKCdjdXN0b21lcnNfb3JnJykpewogIHJlYWREYXRhKGN1c3RvbWVyc19maWxlLCBzdWJzY3JpcHRpb25zX2ZpbGUsIGdkcF9maWxlKQp9CmBgYAoKT3B0aW9uYWxseSBzYW1wbGUgdGhlIGRhdGEgZm9yIGZhc3RlciBkZXZlbG9wbWVudAoKYGBge3IgY3VzdG9tZXJzX3Byb2Nlc3NpbmcsIHRpZHk9Rn0KY3VzdG9tZXJzIDwtIGN1c3RvbWVyc19vcmcgJT4lCiAgcHJvY2Vzc0N1c3RvbWVycyhTQU1QTEVfREFUQSwgZnJhY3Rpb25fc2FtcGxlKQpgYGAKCmBgYHtyIHN1YnNjcmlwdGlvbnNfcHJvY2Vzc2luZywgdGlkeT1GfQoKc3Vic2NyaXB0aW9ucyA8LSBzdWJzY3JpcHRpb25zX29yZyAlPiUKICAjIFJlbW92aW5nIGN1c3RvbWVycyBub3QgaW4gdGhlIGN1c3RvbWVycyBzZXQKICBmaWx0ZXIoY3VzdG9tZXJpZCAlaW4lIGN1c3RvbWVycyRjdXN0b21lcmlkKSAlPiUKCiAgcHJvY2Vzc1N1YnNjcmlwdGlvbnMoKSAlPiUKCiAgam9pblByb2Nlc3NDdXN0b21lcnMoY3VzdG9tZXJzLCBhZ2VfdG9fam9pbl9zaXRldmVycyA9IDUpICU+JQoKICBqb2luUHJvY2Vzc0dEUChnZHApICU+JQoKICBjb25jYXRDYXRlZ3JvcmllcygpICU+JQoKICBtdXRhdGVfaWYoaXMuY2hhcmFjdGVyLCBmdW5zKGFzLmZhY3RvcikpCiAgCmBgYAoKYGBge3J9CnN1bW1hcnkoc3Vic2NyaXB0aW9ucykKYGBgCgpgYGB7cn0Kc3Vic2NyaXB0aW9uc193aXRoX3RhcmdldCA8LSBzdWJzY3JpcHRpb25zICU+JQogICMgcmVzdHJpY3QgdG8gYSByZWNlbnQgZXhwaXJ5IHdpbmRvdwogIGZpbHRlcihlbmRtb250aCA+PSBiZWdpbl90cmFpbl93aW5kb3cgJiBlbmRtb250aCA8IGVuZF93aW5kb3cpICU+JQogIG11dGF0ZShudW1fcHJldmlvdXNfbW9udGhzX2Jpbm5lZF9mY3QgPSBhcy5mYWN0b3IobnVtX3ByZXZpb3VzX21vbnRoc19iaW5uZWQpKSAlPiUKICBtdXRhdGUoc2V0X3R5cGUgPSBhcy5mYWN0b3IoaWZfZWxzZShlbmRtb250aCA+PSBiZWdpbl92YWxpZGF0aW9uX3dpbmRvdywgJ3ZhbGlkYXRpb24nLCAndHJhaW5pbmcnKSkpICU+JQogIAogIG11dGF0ZShjaHVybmluZCA9IGlmZWxzZShzdGF0dXMgPT0gJ2NodXJuJywgMSwgMCkpIApgYGAKCgpQcmVwYXJlIGNodXJudGFibGUgdGhhdCB3ZSB3YW50IHRvIHByZWRpY2R0CgpgYGB7cn0KY2h1cm50YWJsZSA8LSBzdWJzY3JpcHRpb25zX3dpdGhfdGFyZ2V0ICU+JQogIAogIGdyb3VwX2J5KHNldF90eXBlLCBzaXRldmVya2V5X2NhdDIsIG1hcmtldF9jYXRlZ29yeSwgbW9udGhzLCBudW1fcHJldmlvdXNfbW9udGhzX2Jpbm5lZCwgY2hvc2VuX3N1YnNfbGVuZ3RoLCBzdWJzY3JpcHRpb25fc3VtbWFyeV9ub19tYXJrZXQpICU+JQogIHN1bW1hcmlzZShudW1fb2JzID0gbigpLCAKICAgICAgICAgICAgY2h1cm5lZCA9IHN1bShjaHVybmluZCkpICU+JQogIAogIGdyb3VwX2J5KHNldF90eXBlKSAlPiUKICBtdXRhdGUoY2h1cm5fcmF0ZSA9IGNodXJuZWQgLyBudW1fb2JzLAogICAgICAgICByZW5ld19yYXRlID0gMSAtIGNodXJuX3JhdGUsCiAgICAgICAgIG1vbnRoX2NodXJuID0gMSAtIHJlbmV3X3JhdGUgXiAoMS9hcy5kb3VibGUobW9udGhzKSksCiAgICAgICAgIGxvZ19tb250aF9jaHVybiA9IGxvZyhtb250aF9jaHVybiksCiAgICAgICAgIHdlaWdodCA9IG51bV9vYnMgLyBzdW0obnVtX29icykpCgojIE5CISBEb2VzIHRoaXMgaW50cm9kdWNlIGEgYmFkIGJpYXMgPz8/PwpjaHVybnRhYmxlX25vX3plcm9zIDwtIGNodXJudGFibGUgJT4lCiAgZmlsdGVyKGNodXJuX3JhdGUgPiAwKQpgYGAKCmBgYHtyfQpzdW1tYXJ5KGNodXJudGFibGUpCmBgYApgYGB7cn0Kc3VtbWFyeShjaHVybnRhYmxlX25vX3plcm9zKQpgYGAKCgpDYWxjdWxhdGUgbW9kZWwKCmBgYHtyfQpuZXdfbW9kZWw9Z2xtKGxvZ19tb250aF9jaHVybiB+IG1hcmtldF9jYXRlZ29yeSArIHN1YnNjcmlwdGlvbl9zdW1tYXJ5X25vX21hcmtldCwgZGF0YT1jaHVybnRhYmxlX25vX3plcm9zW2NodXJudGFibGVfbm9femVyb3Mkc2V0X3R5cGUgPT0gJ3RyYWluaW5nJywgXSwgd2VpZ2h0cyA9IHdlaWdodCkKc3VtbWFyeShuZXdfbW9kZWwpCgphbm92YShuZXdfbW9kZWwsIHRlc3Q9IkNoaXNxIikKYGBgCgpWYWxpZGF0ZQoKYGBge3J9Cm1vZGVsX3ZhbGlkYXRpb24gPC0gdmFsaWRhdGlvbihzdWJzY3JpcHRpb25zX3dpdGhfdGFyZ2V0LCBuZXdfbW9kZWwsIHByZWRpY3RfMmZjdF9tb2RlbCkKCm1vZGVsX3ZhbGlkYXRpb24kc3VtbWFyeV90YWJsZQpgYGAKCmBgYHtyfQptb2RlbF92YWxpZGF0aW9uJHJvY19wbG90CmBgYAoKYGBge3IgcmVzdWx0cz0naGlkZScsZmlnLmtlZXA9J2FsbCd9Cm1vZGVsX3ZhbGlkYXRpb24kY2FsaWJyYXRpb25fcGxvdHMKYGBgCgpgYGB7ciByZXN1bHRzPSdoaWRlJyxmaWcua2VlcD0nYWxsJ30KbW9kZWxfdmFsaWRhdGlvbiRyZWFsX2NodXJuX3Bsb3QKYGBgCgpUcnkgc2ltcGxlIGxvZ2lzdGljIG1vZGVsCmBgYHtyfQptb2RlbF9sb2dpdCA8LSBnbG0oY2h1cm5pbmQgfiBtYXJrZXRfY2F0ZWdvcnkgKyBzaXRldmVya2V5X2NhdDIgKyBudW1fcHJldmlvdXNfbW9udGhzX2Jpbm5lZCArIG1vbnRocyArIGNob3Nlbl9zdWJzX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzdWJzY3JpcHRpb25zX3dpdGhfdGFyZ2V0W3N1YnNjcmlwdGlvbnNfd2l0aF90YXJnZXQkc2V0X3R5cGUgPT0gJ3RyYWluaW5nJyxdLCBmYW1pbHkgPSAnYmlub21pYWwnKQpzdW1tYXJ5KG1vZGVsX2xvZ2l0KQpgYGAKClZhbGlkYXRlCmBgYHtyfQptb2RlbF92YWxpZGF0aW9uX2xvZ2l0IDwtIHZhbGlkYXRpb24oc3Vic2NyaXB0aW9uc193aXRoX3RhcmdldCwgbW9kZWxfbG9naXQpCm1vZGVsX3ZhbGlkYXRpb25fbG9naXQkc3VtbWFyeV90YWJsZQpgYGAKCmBgYHtyfQptb2RlbF92YWxpZGF0aW9uX2xvZ2l0JHJvY19wbG90CmBgYApgYGB7ciByZXN1bHRzPSdoaWRlJyxmaWcua2VlcD0nYWxsJ30KbW9kZWxfdmFsaWRhdGlvbl9sb2dpdCRjYWxpYnJhdGlvbl9wbG90cwpgYGAKYGBge3IgcmVzdWx0cz0naGlkZScsZmlnLmtlZXA9J2FsbCd9Cm1vZGVsX3ZhbGlkYXRpb25fbG9naXQkcmVhbF9jaHVybl9wbG90CmBgYAoKCg==